package com.hxzy.common.aspect;

import cn.hutool.core.util.StrUtil;
import com.hxzy.common.enums.AckCode;
import com.hxzy.common.util.WaimaiThreadLocal;
import com.hxzy.exception.ServiceException;
import lombok.extern.log4j.Log4j2;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

/**
 * RequiredMerchant 注解的实现类
 * @author Administrator
 */
@Aspect
@Component
@Log4j2
public class RequiredMerchantAspect {

    /**
     * 只要这个方法上面有@RequiredAdmin注解，都要给我拦下来
     */
    @Pointcut(value = "@annotation(com.hxzy.common.annon.RequiredMerchant)")
    private void pointcut(){
    }

    /* *****************************************
     *  spring给我们定义了5种增强的方案                自定义方法返回值
     * 在执行方法之前的增强   @Before                         void
     * 在执行方法之后的增强   @After                          void
     * 在执行方法完成之后返回值的增强 @AfterReturing           Object
     * 在执行方法异常的时候的增强     @AfterThrowing          void
     * 在执行@Before和@After之后的增强环绕   @Around         Object
     ***************************************** */

    /**
     * 拦下来做什么事情(判断当前用户是不是商家)
     */
     @Before(value = "pointcut()")
     public void checkPermission(JoinPoint joinPoint){
        if(WaimaiThreadLocal.isSuperMan()){
            String method=joinPoint.getSignature().toLongString();
            log.error(StrUtil.format("当前管理员：{},不允许访问:{}",WaimaiThreadLocal.getName(),method));
            throw new ServiceException(AckCode.NO_MERCHANT_PERMISSION_TO_ACCESS);
        }
     }



}
